package hector.tang.controller;

import hector.tang.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * controller 方法不同的返回值
 */
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("执行了testString");
        User user=new User();
        user.setUid(1001);
        user.setUname("jerry");
        user.setPassword("123456");
        user.setAge(20);
        model.addAttribute("user",user);
        return "success";
    }

    /**
     * 没有返回值 ，浏览器请求会默认跳转到 /WEB-INF/pages/user/testVoid.jsp
     *                                视图解析器的配置路径/controller的路径/方法注解的路径名.jsp
     *
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //手动转发不会经过视图解析器
//        req.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(req,resp);

        //重定向不能跳转到/WEB-INF/目录下的资源
//        resp.sendRedirect(req.getContextPath()+"/index.jsp");

        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().println("testVoid 返回消息");
        return;
    }

    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        //创建ModelAndView对象
        ModelAndView view=new ModelAndView();
        User user=new User();
        user.setUid(1001);
        user.setUname("jerry");
        user.setPassword("123456");
        user.setAge(20);
        //底层还是存入到request域中
        view.addObject("user",user);

        //指定跳转路径
        view.setViewName("success");
        return view;
    }

    /**
     * 使用关键字进行转发和重定向
     * 这种方法不会使用试图解析器
     * @return
     */
    @RequestMapping("/testForwardAndRedirect")
    public String testForwardAndRedirect(){

        //转发
//        return "forward:/WEB-INF/pages/success.jsp";

        //重定向  这时不加项目名称也可以
        return "redirect:/index.jsp";
    }

    /**
     * 异步请求响应
     */
    @RequestMapping("/testAjax")
    @ResponseBody//将返回的对象转换为json串
    public User testAjax(@RequestBody User user){
        //通过异步请求返回json字符串
        System.out.println("执行了testAjax");
        System.out.println(user.toString());

        user.setUid(10001);
        user.setUname("jerry rat");
        user.setPassword("itisjerry");
        user.setAge(21);
        return user;
    }

}
